﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include "GmFamilyService.h"
#include "IFamilyGeneralForm.h"


namespace gfam
{
    class GM_FAMILY_SERVICE_EXPORT IFamilyMultiSectionLoft : public IFamilyGeneralForm
    {
        DEFINE_CAST_DERIVED(gfam::IFamilyMultiSectionLoft, gfam::IFamilyGeneralForm)

    public:
        /// \brief 创建多截面放样体
        /// 
        /// \param pDocument 文档
        /// \param profileSketchIds 截面轮廓草图Id
        /// \param guideCurveSketchIds 引导线草图Id
        /// \return 多截面放样体
        static IFamilyMultiSectionLoft* Create(gcmp::IDocument* pDoc, const std::vector<gcmp::ElementId>& profileSketchIds, const std::vector<gcmp::ElementId>& guideCurveSketchIds = std::vector<gcmp::ElementId>());

    public:
        /// \brief 获取截面轮廓草图Id
        /// 
        /// \return 截面轮廓草图Id
        virtual std::vector<gcmp::ElementId> GetProfileSketchIds() const = 0;

        /// \brief 设置截面轮廓草图Id
        /// 
        /// \param profileSketchIds  截面轮廓草图Id
        virtual void SetProfileSketchIds(const std::vector<gcmp::ElementId>& profileSketchIds) = 0;

        /// \brief 获取引导线草图Id
        /// 
        /// \return 引导线草图Id
        virtual std::vector<gcmp::ElementId> GetGuideCurveSketchIds() const = 0;

        /// \brief 设置引导线草图Id
        /// 
        /// \param guideCurveSketchIds  引导线草图Id
        virtual void SetGuideCurveSketchIds(const std::vector<gcmp::ElementId>& guideCurveSketchIds) = 0;

        /// \brief 获取轮廓草图id和轮廓族id对应关系
        /// 
        /// \return 轮廓草图id和轮廓族id对应关系
        virtual const std::map<gcmp::ElementId, gcmp::ElementId>& GetProfileInstanceIdMap() const = 0;

        /// \brief 获取多截面放样体侧边是否生成为直线
        /// 
        /// \return 侧边是否生成为直线
        virtual bool GetIsLinearFitting() const = 0;

        /// \brief 设置多截面放样体侧边是否生成为直线
        /// 
        /// \param IsLinearFitting 多截面放样体侧边是否生成为直线
        virtual void SetIsLinearFitting(bool isLinearFitting) = 0;

        /// \brief 获取多截面放样体是否在草图编辑中
        /// 
        /// \return 是否在草图编辑中
        virtual bool GetIsEditingMultiSectionLoft() const = 0;

        /// \brief 设置多截面放样体是否在草图编辑中
        /// 
        /// \param bIsEditingMultiSectionLoft 是否在草图编辑中
        virtual void SetIsEditingMultiSectionLoft(bool bIsEditingMultiSectionLoft) = 0;
    };

}
